package ru.enacu.common.dbupdater;

import java.io.IOException;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;

/**
 * Основной класс framework'а для обновления БД
 *
 * @author enaku_adm
 * @since 08.09.2010 15:11:48
 */
public class DbUpdateManager {
    private final ScriptManager scriptManager;
    private final DatabaseVersionManager versionManager;

    public DbUpdateManager(ScriptManager scriptManager, DatabaseVersionManager versionManager) throws IOException, ClassNotFoundException, SQLException {
        this.scriptManager = scriptManager;
        this.versionManager = versionManager;

        checkAndUpdate();
    }

    /**
     * Проверяет, нужно ли обновлять структуру БД и обновляет ее в случае необходимости
     *
     * @throws ClassNotFoundException
     * @throws java.sql.SQLException
     * @throws java.io.IOException
     */
    public void checkAndUpdate() throws ClassNotFoundException, SQLException, IOException {
        List<Integer> availableScripts = scriptManager.getAvailableUpdateScripts();
        Collections.sort(availableScripts);

        if (availableScripts.size() > 0) {
            int lastScriptNumber = availableScripts.get(availableScripts.size() - 1);

            int currentDbVersion = versionManager.getCurrentDbVersion();
            for (int sNum = currentDbVersion + 1; sNum <= lastScriptNumber; sNum++) {
                scriptManager.updateDb(sNum);
                versionManager.setDbVersion(sNum);
            }
        }
    }
}
